//! OcenyOpisowe.Client.debug.js
//

(function($) {

Type.registerNamespace('OcenyOpisowe.Client.Security');

////////////////////////////////////////////////////////////////////////////////
// OcenyOpisowe.Client.Security.User

OcenyOpisowe.Client.Security.User = function OcenyOpisowe_Client_Security_User() {
    /// <summary>
    /// Obiekt uzytkownika.
    /// Przechowuje jego informacje od momentu zalogowania.
    /// </summary>
    /// <field name="_identifier" type="Number" integer="true">
    /// Identyfikator uzytkownika.
    /// </field>
    /// <field name="_login" type="String">
    /// Login uzytkownika
    /// </field>
    /// <field name="_firstName" type="String">
    /// Imie uzytkownika.
    /// </field>
    /// <field name="_surname" type="String">
    /// Nazwisko uzytkownika.
    /// </field>
}
OcenyOpisowe.Client.Security.User.prototype = {
    _identifier: 0,
    _login: null,
    _firstName: null,
    _surname: null,
    
    get_identifier: function OcenyOpisowe_Client_Security_User$get_identifier() {
        /// <summary>
        /// Identyfikator uzytkownika.
        /// </summary>
        /// <value type="Number" integer="true"></value>
        return this._identifier;
    },
    set_identifier: function OcenyOpisowe_Client_Security_User$set_identifier(value) {
        /// <summary>
        /// Identyfikator uzytkownika.
        /// </summary>
        /// <value type="Number" integer="true"></value>
        this._identifier = value;
        return value;
    },
    
    get_login: function OcenyOpisowe_Client_Security_User$get_login() {
        /// <summary>
        /// Login uzytkownika
        /// </summary>
        /// <value type="String"></value>
        return this._login;
    },
    set_login: function OcenyOpisowe_Client_Security_User$set_login(value) {
        /// <summary>
        /// Login uzytkownika
        /// </summary>
        /// <value type="String"></value>
        this._login = value;
        return value;
    },
    
    get_firstName: function OcenyOpisowe_Client_Security_User$get_firstName() {
        /// <summary>
        /// Imie uzytkownika.
        /// </summary>
        /// <value type="String"></value>
        return this._firstName;
    },
    set_firstName: function OcenyOpisowe_Client_Security_User$set_firstName(value) {
        /// <summary>
        /// Imie uzytkownika.
        /// </summary>
        /// <value type="String"></value>
        this._firstName = value;
        return value;
    },
    
    get_surname: function OcenyOpisowe_Client_Security_User$get_surname() {
        /// <summary>
        /// Nazwisko uzytkownika.
        /// </summary>
        /// <value type="String"></value>
        return this._surname;
    },
    set_surname: function OcenyOpisowe_Client_Security_User$set_surname(value) {
        /// <summary>
        /// Nazwisko uzytkownika.
        /// </summary>
        /// <value type="String"></value>
        this._surname = value;
        return value;
    }
}


Type.registerNamespace('OcenyOpisowe.Client.Web');

////////////////////////////////////////////////////////////////////////////////
// OcenyOpisowe.Client.Web.AjaxRequestMethod

OcenyOpisowe.Client.Web.AjaxRequestMethod = function() { 
    /// <summary>
    /// Enumeracja typ�w rzadan ajax'owych.
    /// </summary>
    /// <field name="get" type="Number" integer="true" static="true">
    /// Dane rzadania beda przesylane jako rzadanie GET.
    /// </field>
    /// <field name="post" type="Number" integer="true" static="true">
    /// Dane rzadania beda przesylane jako rzadanie POST.
    /// </field>
};
OcenyOpisowe.Client.Web.AjaxRequestMethod.prototype = {
    get: 1, 
    post: 2
}
OcenyOpisowe.Client.Web.AjaxRequestMethod.registerEnum('OcenyOpisowe.Client.Web.AjaxRequestMethod', false);


Type.registerNamespace('OcenyOpisowe.Client');

////////////////////////////////////////////////////////////////////////////////
// OcenyOpisowe.Client.Application

OcenyOpisowe.Client.Application = function OcenyOpisowe_Client_Application() {
    /// <summary>
    /// Klasa gl�wna aplikacji.
    /// Odpowiada za zaladowanie oraz wystartowanie klienckiej czesci aplikacji
    /// Oceny Opisowe 2011.
    /// </summary>
    /// <field name="_instance" type="OcenyOpisowe.Client.Application" static="true">
    /// Instancja aplikacji zainicjowana w metodzie <c>Run.</c>
    /// </field>
    /// <field name="_applicationConsole" type="OcenyOpisowe.Client.ApplicationConsole">
    /// Konsola aplikacji sluzaca do informowania o bledach aplikacji.
    /// </field>
    /// <field name="_applicationMenu" type="OcenyOpisowe.Client.Controls.MenuControl">
    /// Menu aplikacji pozwalajace na wybieranie akcji wewnatrz aplikacji.
    /// </field>
    /// <field name="_currentScreen" type="OcenyOpisowe.Client.Controls.ApplicationScreen">
    /// Obecnie wyswietlany przez aplikacje ekran.
    /// </field>
    /// <field name="_currentUser" type="OcenyOpisowe.Client.Security.User">
    /// Obecnie zalogowany do aplikacji uzytkownik.
    /// </field>
    /// <field name="_userProfileControl" type="OcenyOpisowe.Client.Controls.UserProfileControl">
    /// Kontrolka konta obecnie zalogowanego uzytkownika.
    /// Pozwala na sprawdzanie stanu zalogowania uzytkownika
    /// oraz zarzadzac stanem zalogowania tegoz uzytkownika.
    /// </field>
    this._applicationConsole = new OcenyOpisowe.Client.ApplicationConsole();
}
OcenyOpisowe.Client.Application.get_instance = function OcenyOpisowe_Client_Application$get_instance() {
    /// <summary>
    /// Getter dla instancji aplikacji zainicjowanej w metodzie <c>Run</c>.
    /// </summary>
    /// <value type="OcenyOpisowe.Client.Application"></value>
    return OcenyOpisowe.Client.Application._instance;
}
OcenyOpisowe.Client.Application.run = function OcenyOpisowe_Client_Application$run() {
    /// <summary>
    /// Metoda odpowiedzialna za uruchomienie aplikacji i tchnienie w nia zycia.
    /// </summary>
    OcenyOpisowe.Client.Application._instance = new OcenyOpisowe.Client.Application();
}
OcenyOpisowe.Client.Application.prototype = {
    
    get_applicationMenu: function OcenyOpisowe_Client_Application$get_applicationMenu() {
        /// <summary>
        /// Pobiera menu aplikacji pozwalajace na wykonywanie akcji w systemie.
        /// </summary>
        /// <value type="OcenyOpisowe.Client.Controls.MenuControl"></value>
        return this._applicationMenu;
    },
    
    get_console: function OcenyOpisowe_Client_Application$get_console() {
        /// <summary>
        /// Konsola plikacji sluzaca do informowania o bledach aplikacji.
        /// </summary>
        /// <value type="OcenyOpisowe.Client.ApplicationConsole"></value>
        return this._applicationConsole;
    },
    
    get_currentScreen: function OcenyOpisowe_Client_Application$get_currentScreen() {
        /// <summary>
        /// Pobiera obecnie wyswietlany przez aplikacje ekran.
        /// </summary>
        /// <value type="OcenyOpisowe.Client.Controls.ApplicationScreen"></value>
        return this._currentScreen;
    },
    
    get_currentUser: function OcenyOpisowe_Client_Application$get_currentUser() {
        /// <summary>
        /// Obecnie zalogowany do aplikacji uzytkownik.
        /// </summary>
        /// <value type="OcenyOpisowe.Client.Security.User"></value>
        return this._currentUser;
    },
    set_currentUser: function OcenyOpisowe_Client_Application$set_currentUser(value) {
        /// <summary>
        /// Obecnie zalogowany do aplikacji uzytkownik.
        /// </summary>
        /// <value type="OcenyOpisowe.Client.Security.User"></value>
        this._currentUser = value;
        return value;
    },
    
    get_userProfileControl: function OcenyOpisowe_Client_Application$get_userProfileControl() {
        /// <summary>
        /// Kontrolka konta obecnie zalogowanego uzytkownika.
        /// Pozwala na sprawdzanie stanu zalogowania uzytkownika
        /// oraz zarzadzac stanem zalogowania tegoz uzytkownika.
        /// </summary>
        /// <value type="OcenyOpisowe.Client.Controls.UserProfileControl"></value>
        return this._userProfileControl;
    },
    
    _applicationConsole: null,
    _applicationMenu: null,
    _currentScreen: null,
    _currentUser: null,
    _userProfileControl: null,
    
    setApplicationMenu: function OcenyOpisowe_Client_Application$setApplicationMenu(menuControl) {
        /// <summary>
        /// Ustawia menu aplikacji dla tej aplikacji.
        /// </summary>
        /// <param name="menuControl" type="OcenyOpisowe.Client.Controls.MenuControl">
        /// Menu aplikacji jakie przypisac.
        /// </param>
        this._applicationMenu = menuControl;
        menuControl.set_parentDomElement(document.body);
    },
    
    setUserProfileControl: function OcenyOpisowe_Client_Application$setUserProfileControl(userProfileControl) {
        /// <summary>
        /// Metoda dodajaca kontrolke profilu uzytkownika do aplikacji.
        /// </summary>
        /// <param name="userProfileControl" type="OcenyOpisowe.Client.Controls.UserProfileControl">
        /// Kontrolka profilu uzytkownika do dodania.
        /// </param>
        this._userProfileControl = userProfileControl;
        userProfileControl.set_parentDomElement(document.body);
    }
}


////////////////////////////////////////////////////////////////////////////////
// OcenyOpisowe.Client.ApplicationConsole

OcenyOpisowe.Client.ApplicationConsole = function OcenyOpisowe_Client_ApplicationConsole() {
    /// <summary>
    /// Klasa konsoli aplikacji.
    /// Pozwala ona na informowanie uzytkownik�w o bledach wewnatrz aplikacji.
    /// Bledy jakie powinny byc tutaj zglaszane sa bledami krytycznymi - powodujacymi niepozadane dzialanie
    /// aplikacji Oceny Opisowe.
    /// </summary>
}
OcenyOpisowe.Client.ApplicationConsole.prototype = {
    
    reportError: function OcenyOpisowe_Client_ApplicationConsole$reportError(errorMessage) {
        /// <summary>
        /// Metoda logujaca informacje o bledach zwiazanych z aplikacja.
        /// Przyjmuje ona informacje o bledach krytycznych aplikacji.
        /// </summary>
        /// <param name="errorMessage" type="String">
        /// Tresc wiadomosci.
        /// </param>
        alert('Wyst\u0105pi\u0142 b\u0142\u0105d w dzia\u0142aniu aplikacji: ' + errorMessage);
    }
}


Type.registerNamespace('OcenyOpisowe.Client.Controls');

////////////////////////////////////////////////////////////////////////////////
// OcenyOpisowe.Client.Controls.AbstractControl

OcenyOpisowe.Client.Controls.AbstractControl = function OcenyOpisowe_Client_Controls_AbstractControl() {
    /// <summary>
    /// Klasa bazowa dla wszystkich kontrolek aplikacji Oceny Opisowe.
    /// </summary>
    /// <field name="_controls" type="Array">
    /// Kolekcja kontrolek dodanych jako podelementy tej kontrolki.
    /// </field>
    /// <field name="_domElement" type="Object" domElement="true">
    /// Element dokumentu, z kt�rym powiazana jest ta kontrolka.
    /// </field>
    /// <field name="_parentDomElement" type="Object" domElement="true">
    /// Nadrzedny dla tej kontrolki element HTML.
    /// </field>
    this._controls = [];
}
OcenyOpisowe.Client.Controls.AbstractControl.prototype = {
    _controls: null,
    _domElement: null,
    _parentDomElement: null,
    
    get_controls: function OcenyOpisowe_Client_Controls_AbstractControl$get_controls() {
        /// <summary>
        /// Kolekcja kontrolek dodanych jako podelementy tej kontrolki.
        /// </summary>
        /// <value type="Array"></value>
        return this._controls;
    },
    
    get_domElement: function OcenyOpisowe_Client_Controls_AbstractControl$get_domElement() {
        /// <summary>
        /// Element dokumentu, z kt�rym powiazana jest ta kontrolka.
        /// </summary>
        /// <value type="Object" domElement="true"></value>
        return this._domElement;
    },
    set_domElement: function OcenyOpisowe_Client_Controls_AbstractControl$set_domElement(value) {
        /// <summary>
        /// Element dokumentu, z kt�rym powiazana jest ta kontrolka.
        /// </summary>
        /// <value type="Object" domElement="true"></value>
        this._domElement = value;
        return value;
    },
    
    get_parentDomElement: function OcenyOpisowe_Client_Controls_AbstractControl$get_parentDomElement() {
        /// <summary>
        /// Nadrzedny dla tej kontrolki element HTML.
        /// </summary>
        /// <value type="Object" domElement="true"></value>
        return this._parentDomElement;
    },
    set_parentDomElement: function OcenyOpisowe_Client_Controls_AbstractControl$set_parentDomElement(value) {
        /// <summary>
        /// Nadrzedny dla tej kontrolki element HTML.
        /// </summary>
        /// <value type="Object" domElement="true"></value>
        this._parentDomElement = value;
        return value;
    }
}


////////////////////////////////////////////////////////////////////////////////
// OcenyOpisowe.Client.Controls.AbstractMenuControl

OcenyOpisowe.Client.Controls.AbstractMenuControl = function OcenyOpisowe_Client_Controls_AbstractMenuControl() {
    /// <summary>
    /// Bazowa kontrolka menu.
    /// Zawiera bazowe funkcjonalnosci dostepne dla wszystkich kontrolek menu.
    /// </summary>
    /// <field name="_menuItems$1" type="Array">
    /// Kolekcja element�w menu dodanych do tej kontrolki.
    /// </field>
    OcenyOpisowe.Client.Controls.AbstractMenuControl.initializeBase(this);
    this._menuItems$1 = [];
}
OcenyOpisowe.Client.Controls.AbstractMenuControl.prototype = {
    _menuItems$1: null,
    
    get_menuItems: function OcenyOpisowe_Client_Controls_AbstractMenuControl$get_menuItems() {
        /// <summary>
        /// Kolekcja element�w menu, dodanych jako podelementy.
        /// </summary>
        /// <value type="System.Collections.Generic.IEnumerable"></value>
        return this._menuItems$1;
    },
    
    addMenuItem: function OcenyOpisowe_Client_Controls_AbstractMenuControl$addMenuItem(item) {
        /// <summary>
        /// Dodaje nowy element menu do tego elementu..
        /// </summary>
        /// <param name="item" type="OcenyOpisowe.Client.Controls.MenuItemControl">
        /// Element menu do dodania.
        /// </param>
        this._menuItems$1.add(item);
    },
    
    clearMenuItems: function OcenyOpisowe_Client_Controls_AbstractMenuControl$clearMenuItems() {
        /// <summary>
        /// Metoda czyszczaca kolekcje wszystkich element�w menu.
        /// </summary>
        this._menuItems$1.clear();
    },
    
    removeMenuItem: function OcenyOpisowe_Client_Controls_AbstractMenuControl$removeMenuItem(item) {
        /// <summary>
        /// Usuwa element z kolekcji element�w menu.
        /// </summary>
        /// <param name="item" type="OcenyOpisowe.Client.Controls.MenuItemControl">
        /// Element do usuniecia.
        /// </param>
        this._menuItems$1.remove(item);
    }
}


////////////////////////////////////////////////////////////////////////////////
// OcenyOpisowe.Client.Controls.ApplicationScreen

OcenyOpisowe.Client.Controls.ApplicationScreen = function OcenyOpisowe_Client_Controls_ApplicationScreen() {
    OcenyOpisowe.Client.Controls.ApplicationScreen.initializeBase(this);
}


////////////////////////////////////////////////////////////////////////////////
// OcenyOpisowe.Client.Controls.DataBoundControl

OcenyOpisowe.Client.Controls.DataBoundControl = function OcenyOpisowe_Client_Controls_DataBoundControl() {
    /// <summary>
    /// Kontrolka pozwalajaca na bindowanie do zewnetrznych danych.
    /// Spos�b pobierania danych jest okreslony przez odpowiednie zr�dlo danych.
    /// </summary>
    /// <field name="_dataSource$1" type="OcenyOpisowe.Client.Data.IDataSource">
    /// Zr�dlo danych z kt�rego kontrolka bedzie brala swoje dane.
    /// </field>
    OcenyOpisowe.Client.Controls.DataBoundControl.initializeBase(this);
}
OcenyOpisowe.Client.Controls.DataBoundControl.prototype = {
    _dataSource$1: null,
    
    get_dataSource: function OcenyOpisowe_Client_Controls_DataBoundControl$get_dataSource() {
        /// <summary>
        /// Zr�dlo danych z kt�rego kontrolka bedzie brala swoje dane.
        /// </summary>
        /// <value type="OcenyOpisowe.Client.Data.IDataSource"></value>
        return this._dataSource$1;
    },
    set_dataSource: function OcenyOpisowe_Client_Controls_DataBoundControl$set_dataSource(value) {
        /// <summary>
        /// Zr�dlo danych z kt�rego kontrolka bedzie brala swoje dane.
        /// </summary>
        /// <value type="OcenyOpisowe.Client.Data.IDataSource"></value>
        this._dataSource$1 = value;
        return value;
    },
    
    dataBind: function OcenyOpisowe_Client_Controls_DataBoundControl$dataBind() {
        /// <summary>
        /// Binduje dane do okreslonego zr�dla danych.
        /// </summary>
        if (this._dataSource$1 == null) {
            OcenyOpisowe.Client.Application.get_instance().get_console().reportError('Control DataSource is null!');
            return;
        }
        this.onDataBinding();
    },
    
    setDataSource: function OcenyOpisowe_Client_Controls_DataBoundControl$setDataSource(dataSource) {
        /// <summary>
        /// Ustawia zr�dlo danych na zr�dlo podane w argumencie metody.
        /// Wykorzystywane gl�wnie przez zewnetrzny kod javascript.
        /// </summary>
        /// <param name="dataSource" type="OcenyOpisowe.Client.Data.IDataSource">
        /// Zr�dlo danych, kt�re przypisac do tej kontrolki.
        /// </param>
        this._dataSource$1 = dataSource;
    }
}


////////////////////////////////////////////////////////////////////////////////
// OcenyOpisowe.Client.Controls.UserProfileControl

OcenyOpisowe.Client.Controls.UserProfileControl = function OcenyOpisowe_Client_Controls_UserProfileControl() {
    /// <summary>
    /// Kontrolka pozwalajaca na wyswietlenie danych obecnie zalogowanego uzytkownika.
    /// </summary>
    /// <field name="_userProfileTemplateIdentifier$2" type="String">
    /// Identyfikator szablonu, w kt�rym znajduja sie informacje o wygladzie kontrolki.
    /// </field>
    OcenyOpisowe.Client.Controls.UserProfileControl.initializeBase(this);
}
OcenyOpisowe.Client.Controls.UserProfileControl.prototype = {
    _userProfileTemplateIdentifier$2: null,
    
    onDataBinding: function OcenyOpisowe_Client_Controls_UserProfileControl$onDataBinding() {
        /// <summary>
        /// Metoda zawierajaca implementacje bindowania danych do danej kontrolki.
        /// </summary>
        this.get_dataSource().beginDataLoading(ss.Delegate.create(this, this._onDataLoaded$2));
    },
    
    _onDataLoaded$2: function OcenyOpisowe_Client_Controls_UserProfileControl$_onDataLoaded$2(data, status, httpRequest) {
        /// <summary>
        /// Wywolywane po wczytaniu danych kontrolki.
        /// Binduje dane do szablonu a nastepnie dodaje kontrolke do ekranu.
        /// </summary>
        /// <param name="data" type="Object">
        /// Dane wczytane z serwera.
        /// </param>
        /// <param name="status" type="String">
        /// Status pobierania danych.
        /// </param>
        /// <param name="httpRequest" type="jQueryXmlHttpRequest">
        /// Obiekt rzadania ajax'owego.
        /// </param>
        var userDataObject = data.User;
        if (userDataObject != null) {
            var currentUser = new OcenyOpisowe.Client.Security.User();
            currentUser.set_identifier(data.Identifier);
            currentUser.set_login(data.Login);
            currentUser.set_firstName(data.FirstName);
            currentUser.set_surname(data.Surname);
            OcenyOpisowe.Client.Application.get_instance().set_currentUser(currentUser);
        }
        else {
            OcenyOpisowe.Client.Application.get_instance().set_currentUser(null);
        }
        var nextElement = null;
        if (this.get_domElement() != null) {
            if (this.get_parentDomElement() != null) {
                this.get_parentDomElement().removeChild(this.get_domElement());
            }
            else {
                this.set_parentDomElement(this.get_domElement().parentNode);
                nextElement = this.get_domElement().nextSibling;
                this.get_domElement().parentNode.removeChild(this.get_domElement());
            }
        }
        var parsedMenuTemplate = $("#" + this._userProfileTemplateIdentifier$2).tmpl(data);
        if (parsedMenuTemplate == null || !parsedMenuTemplate.length) {
            OcenyOpisowe.Client.Application.get_instance().get_console().reportError('Error ocured during user profile control initialization!');
            return;
        }
        this.set_domElement(parsedMenuTemplate[0]);
        if (nextElement != null) {
            nextElement.insertBefore(this.get_domElement());
        }
        else {
            this.get_parentDomElement().appendChild(this.get_domElement());
        }
    },
    
    setUserProfileTemplateIdentifier: function OcenyOpisowe_Client_Controls_UserProfileControl$setUserProfileTemplateIdentifier(identifier) {
        /// <summary>
        /// Metoda ustawiajaca identyfikator szablonu wygladu kontrolki.
        /// </summary>
        /// <param name="identifier" type="String">
        /// Identyfikator szablonu wygladu kontrolki.
        /// </param>
        this._userProfileTemplateIdentifier$2 = identifier;
    }
}


////////////////////////////////////////////////////////////////////////////////
// OcenyOpisowe.Client.Controls.MenuControl

OcenyOpisowe.Client.Controls.MenuControl = function OcenyOpisowe_Client_Controls_MenuControl() {
    /// <summary>
    /// Kontrolka menu.
    /// Pozwala ona na wyswietlanie menu aplikacji wraz z kontrolkami poszczeg�lnych akcji menu.
    /// </summary>
    /// <field name="_menuItems$2" type="Array">
    /// Kolekcja element�w menu dodanych do tej kontrolki.
    /// </field>
    /// <field name="_menuItemsSelector$2" type="String">
    /// Selektor sluzacy do pobierania element�w menu.
    /// </field>
    /// <field name="_menuSubitemsSelector$2" type="String">
    /// Selektor sluzacy do pobierania podelement�w menu.
    /// </field>
    /// <field name="_menuTemplateIdentifier$2" type="String">
    /// Identyfikator szablonu wygladu menu.
    /// Wykorzystywany do tworzenia kontrolki menu.
    /// </field>
    OcenyOpisowe.Client.Controls.MenuControl.initializeBase(this);
    this._menuItems$2 = [];
}
OcenyOpisowe.Client.Controls.MenuControl.prototype = {
    _menuItems$2: null,
    _menuItemsSelector$2: null,
    _menuSubitemsSelector$2: null,
    _menuTemplateIdentifier$2: null,
    
    get_menuItems: function OcenyOpisowe_Client_Controls_MenuControl$get_menuItems() {
        /// <summary>
        /// Kolekcja element�w menu, dodanych jako podelementy.
        /// </summary>
        /// <value type="System.Collections.Generic.IEnumerable"></value>
        return this._menuItems$2;
    },
    
    addMenuItem: function OcenyOpisowe_Client_Controls_MenuControl$addMenuItem(item) {
        /// <summary>
        /// Dodaje nowy element menu do tego elementu..
        /// </summary>
        /// <param name="item" type="OcenyOpisowe.Client.Controls.MenuItemControl">
        /// Element menu do dodania.
        /// </param>
        this._menuItems$2.add(item);
    },
    
    clearMenuItems: function OcenyOpisowe_Client_Controls_MenuControl$clearMenuItems() {
        /// <summary>
        /// Metoda czyszczaca kolekcje wszystkich element�w menu.
        /// </summary>
        this._menuItems$2.clear();
    },
    
    removeMenuItem: function OcenyOpisowe_Client_Controls_MenuControl$removeMenuItem(item) {
        /// <summary>
        /// Usuwa element z kolekcji element�w menu.
        /// </summary>
        /// <param name="item" type="OcenyOpisowe.Client.Controls.MenuItemControl">
        /// Element do usuniecia.
        /// </param>
        this._menuItems$2.remove(item);
    },
    
    _loadMenu$2: function OcenyOpisowe_Client_Controls_MenuControl$_loadMenu$2(menuDataJson) {
        /// <summary>
        /// Metoda wczytujaca zawartosc menu z obecnie zaladowanej strony.
        /// Po wczytaniu menu usuwa elementy DOM, z kt�rych wczytywane byly dane tak aby zbednie nie obciazaly
        /// przegladarki www.
        /// </summary>
        /// <param name="menuDataJson" type="Object">
        /// Ciag znak�w Json zawierajacy dane wejsciowe dla menu.
        /// </param>
        this.clearMenuItems();
        var nextElement = null;
        if (this.get_domElement() != null) {
            if (this.get_parentDomElement() != null) {
                this.get_parentDomElement().removeChild(this.get_domElement());
            }
            else {
                this.set_parentDomElement(this.get_domElement().parentNode);
                nextElement = this.get_domElement().nextSibling;
                this.get_domElement().parentNode.removeChild(this.get_domElement());
            }
        }
        var parsedMenuTemplate = $("#" + this._menuTemplateIdentifier$2).tmpl(menuDataJson);
        if (parsedMenuTemplate == null || !parsedMenuTemplate.length) {
            OcenyOpisowe.Client.Application.get_instance().get_console().reportError('Error ocured during menu initialization!');
            return;
        }
        this.set_domElement(parsedMenuTemplate[0]);
        this._loadMenuItems$2(parsedMenuTemplate);
        if (nextElement != null) {
            nextElement.insertBefore(this.get_domElement());
        }
        else {
            this.get_parentDomElement().appendChild(this.get_domElement());
        }
    },
    
    _loadMenuItems$2: function OcenyOpisowe_Client_Controls_MenuControl$_loadMenuItems$2(menuObject) {
        /// <summary>
        /// Metoda wczytujaca elementy menu z podanego w argumencie obiektu menu.
        /// Obiekt ten zostal zainicjowany przez metode LoadMenu.
        /// </summary>
        /// <param name="menuObject" type="jQueryObject">
        /// Obiekt menu, z kt�rego wczytac elementy meny.
        /// </param>
        var menuItemsCollection = $(this._menuItemsSelector$2, menuObject);
        var $enum1 = ss.IEnumerator.getEnumerator(menuItemsCollection.get());
        while ($enum1.moveNext()) {
            var menuItemElement = $enum1.current;
            var menuItem = new OcenyOpisowe.Client.Controls.MenuItemControl(this);
            menuItem.set_domElement(menuItemElement);
            this.addMenuItem(menuItem);
            this._loadMenuItemSubitems$2(menuItem, menuItemElement);
        }
    },
    
    _loadMenuItemSubitems$2: function OcenyOpisowe_Client_Controls_MenuControl$_loadMenuItemSubitems$2(menuItem, menuItemElement) {
        /// <summary>
        /// Metoda wczytujaca podelementy dla elementu menu.
        /// </summary>
        /// <param name="menuItem" type="OcenyOpisowe.Client.Controls.MenuItemControl">
        /// Element menu, dla kt�rego pobrac podelementy menu.
        /// </param>
        /// <param name="menuItemElement" type="Object" domElement="true">
        /// Wezel, w kt�rym znajduja sie informacje o podelementach menu.
        /// </param>
        var menuItemsCollection = $(this._menuSubitemsSelector$2, menuItemElement);
        var $enum1 = ss.IEnumerator.getEnumerator(menuItemsCollection.get());
        while ($enum1.moveNext()) {
            var menuSubitemElement = $enum1.current;
            var menuSubitem = new OcenyOpisowe.Client.Controls.MenuItemControl(this);
            menuSubitem.set_domElement(menuSubitemElement);
            menuItem.addMenuItem(menuSubitem);
        }
    },
    
    onDataBinding: function OcenyOpisowe_Client_Controls_MenuControl$onDataBinding() {
        /// <summary>
        /// Metoda zawierajaca implementacje bindowania danych do danej kontrolki.
        /// </summary>
        this.get_dataSource().beginDataLoading(ss.Delegate.create(this, this._onDataLoaded$2));
    },
    
    _onDataLoaded$2: function OcenyOpisowe_Client_Controls_MenuControl$_onDataLoaded$2(data, status, httpRequest) {
        /// <summary>
        /// Wywolywane w momencie pobrania danych do menu aplikacji.
        /// </summary>
        /// <param name="data" type="Object">
        /// Dane menu pobrane z serwera.
        /// </param>
        /// <param name="status" type="String">
        /// Status pobierania danych.
        /// </param>
        /// <param name="httpRequest" type="jQueryXmlHttpRequest">
        /// Objekt rzadania Ajax.
        /// </param>
        this._loadMenu$2(data);
    },
    
    setMenuItemsSelector: function OcenyOpisowe_Client_Controls_MenuControl$setMenuItemsSelector(menuItemsSelector) {
        /// <summary>
        /// Metoda ustawiajaca selektor sluzacy do pobrania wszystkich element�w
        /// gl�wnych menu.
        /// </summary>
        /// <param name="menuItemsSelector" type="String">
        /// Selektor jQuery dla element�w menu.
        /// </param>
        this._menuItemsSelector$2 = menuItemsSelector;
    },
    
    setMenuSubitemsSelector: function OcenyOpisowe_Client_Controls_MenuControl$setMenuSubitemsSelector(menuSubitemsSelector) {
        /// <summary>
        /// Metoda ustawiajaca selektor sluzacy do pobierania podelement�w menu dla zadanego elementu menu.
        /// </summary>
        /// <param name="menuSubitemsSelector" type="String">
        /// Selektor jQuery dla podelementow menu.
        /// </param>
        this._menuSubitemsSelector$2 = menuSubitemsSelector;
    },
    
    setMenuTemplate: function OcenyOpisowe_Client_Controls_MenuControl$setMenuTemplate(templateIdentifier) {
        /// <summary>
        /// Metoda ustawiajaca identyfikator szablonu wygladu menu.
        /// </summary>
        /// <param name="templateIdentifier" type="String">
        /// Identyfikator szablonu menu.
        /// </param>
        this._menuTemplateIdentifier$2 = templateIdentifier;
    }
}


////////////////////////////////////////////////////////////////////////////////
// OcenyOpisowe.Client.Controls.MenuItemControl

OcenyOpisowe.Client.Controls.MenuItemControl = function OcenyOpisowe_Client_Controls_MenuItemControl(menuControl) {
    /// <summary>
    /// Kontrolka elementu menu.
    /// </summary>
    /// <param name="menuControl" type="OcenyOpisowe.Client.Controls.MenuControl">
    /// Kontrolka menu, do kt�rej dodany jest ten element menu.
    /// </param>
    /// <field name="_menu$2" type="OcenyOpisowe.Client.Controls.MenuControl">
    /// Menu, do kt�rego dodany jest ten element menu.
    /// </field>
    /// <field name="_isSelected$2" type="Boolean">
    /// Czy element menu jest wybrany przez uzytkownika.
    /// </field>
    OcenyOpisowe.Client.Controls.MenuItemControl.initializeBase(this);
    this._menu$2 = menuControl;
}
OcenyOpisowe.Client.Controls.MenuItemControl.prototype = {
    _menu$2: null,
    _isSelected$2: false,
    
    get_menu: function OcenyOpisowe_Client_Controls_MenuItemControl$get_menu() {
        /// <summary>
        /// Menu, do kt�rego dodany jest ten element menu.
        /// </summary>
        /// <value type="OcenyOpisowe.Client.Controls.MenuControl"></value>
        return this._menu$2;
    },
    
    get_isSelected: function OcenyOpisowe_Client_Controls_MenuItemControl$get_isSelected() {
        /// <summary>
        /// Czy element menu jest wybrany przez uzytkownika.
        /// </summary>
        /// <value type="Boolean"></value>
        return this._isSelected$2;
    },
    set_isSelected: function OcenyOpisowe_Client_Controls_MenuItemControl$set_isSelected(value) {
        /// <summary>
        /// Czy element menu jest wybrany przez uzytkownika.
        /// </summary>
        /// <value type="Boolean"></value>
        this._isSelected$2 = value;
        return value;
    }
}


////////////////////////////////////////////////////////////////////////////////
// OcenyOpisowe.Client.Controls.ProfileControl

OcenyOpisowe.Client.Controls.ProfileControl = function OcenyOpisowe_Client_Controls_ProfileControl() {
    OcenyOpisowe.Client.Controls.ProfileControl.initializeBase(this);
}


////////////////////////////////////////////////////////////////////////////////
// OcenyOpisowe.Client.Controls.ScreenTitleControl

OcenyOpisowe.Client.Controls.ScreenTitleControl = function OcenyOpisowe_Client_Controls_ScreenTitleControl() {
    OcenyOpisowe.Client.Controls.ScreenTitleControl.initializeBase(this);
}


Type.registerNamespace('OcenyOpisowe.Client.Data');

////////////////////////////////////////////////////////////////////////////////
// OcenyOpisowe.Client.Data.IDataSource

OcenyOpisowe.Client.Data.IDataSource = function() { 
    /// <summary>
    /// Interfejs zwierajacy metody wsp�lne dla kazdego zr�dla danych.
    /// </summary>
};
OcenyOpisowe.Client.Data.IDataSource.prototype = {
    beginDataLoading : null,
    beginDataLoadingEx : null
}
OcenyOpisowe.Client.Data.IDataSource.registerInterface('OcenyOpisowe.Client.Data.IDataSource');


////////////////////////////////////////////////////////////////////////////////
// OcenyOpisowe.Client.Data.JsonActionResultDataSource

OcenyOpisowe.Client.Data.JsonActionResultDataSource = function OcenyOpisowe_Client_Data_JsonActionResultDataSource(dataSourceUrl) {
    /// <summary>
    /// Zr�dlo danych pozwalajace na pobieranie danych poprzez rzadanie Ajax ze strony
    /// do kt�rej dodana jest aplikacja.
    /// </summary>
    /// <param name="dataSourceUrl" type="String">
    /// Adres url, z kt�rego beda pobierane dane.
    /// </param>
    /// <field name="_requestMethod" type="OcenyOpisowe.Client.Web.AjaxRequestMethod">
    /// Typ rzadania wykorzystywany przy pobieraniu danych.
    /// </field>
    /// <field name="_dataRequestParameters" type="String">
    /// Ciag znak�w zawierajacy parametry dla pobierania danych ze zr�dla.
    /// </field>
    /// <field name="_dataSourceUrl" type="String">
    /// Adres url zr�dla danych.
    /// </field>
    this._requestMethod = OcenyOpisowe.Client.Web.AjaxRequestMethod.post;
    this._dataSourceUrl = dataSourceUrl;
}
OcenyOpisowe.Client.Data.JsonActionResultDataSource.prototype = {
    _requestMethod: 0,
    _dataRequestParameters: null,
    _dataSourceUrl: null,
    
    get_dataRequestParameters: function OcenyOpisowe_Client_Data_JsonActionResultDataSource$get_dataRequestParameters() {
        /// <summary>
        /// Ciag znak�w zawierajacy parametry dla pobierania danych ze zr�dla.
        /// </summary>
        /// <value type="String"></value>
        return this._dataRequestParameters;
    },
    set_dataRequestParameters: function OcenyOpisowe_Client_Data_JsonActionResultDataSource$set_dataRequestParameters(value) {
        /// <summary>
        /// Ciag znak�w zawierajacy parametry dla pobierania danych ze zr�dla.
        /// </summary>
        /// <value type="String"></value>
        this._dataRequestParameters = value;
        return value;
    },
    
    get_dataSourceUrl: function OcenyOpisowe_Client_Data_JsonActionResultDataSource$get_dataSourceUrl() {
        /// <summary>
        /// Adres url zr�dla danych.
        /// </summary>
        /// <value type="String"></value>
        return this._dataSourceUrl;
    },
    set_dataSourceUrl: function OcenyOpisowe_Client_Data_JsonActionResultDataSource$set_dataSourceUrl(value) {
        /// <summary>
        /// Adres url zr�dla danych.
        /// </summary>
        /// <value type="String"></value>
        this._dataSourceUrl = value;
        return value;
    },
    
    get_requestMethod: function OcenyOpisowe_Client_Data_JsonActionResultDataSource$get_requestMethod() {
        /// <summary>
        /// Typ rzadania wykorzystywany przy pobieraniu danych.
        /// </summary>
        /// <value type="OcenyOpisowe.Client.Web.AjaxRequestMethod"></value>
        return this._requestMethod;
    },
    set_requestMethod: function OcenyOpisowe_Client_Data_JsonActionResultDataSource$set_requestMethod(value) {
        /// <summary>
        /// Typ rzadania wykorzystywany przy pobieraniu danych.
        /// </summary>
        /// <value type="OcenyOpisowe.Client.Web.AjaxRequestMethod"></value>
        this._requestMethod = value;
        return value;
    },
    
    beginDataLoading: function OcenyOpisowe_Client_Data_JsonActionResultDataSource$beginDataLoading(onDataLoaded) {
        /// <summary>
        /// Rozpoczyna pobieranie danych ze zr�dla danych.
        /// Dane te sa wymagane do p�zniejszego procesu bindowania danych do kontrolek.
        /// </summary>
        /// <param name="onDataLoaded" type="AjaxRequestCallback">
        /// Callback, wywolywany po pobraniu danych ze zr�dla danych.
        /// </param>
        this.beginDataLoadingEx(onDataLoaded, ss.Delegate.create(this, this._onLoadingError));
    },
    
    beginDataLoadingEx: function OcenyOpisowe_Client_Data_JsonActionResultDataSource$beginDataLoadingEx(onDataLoaded, onError) {
        /// <summary>
        /// Rozpoczyna pobieranie danych ze zr�dla danych.
        /// Dane te sa wymagane do p�zniejszego procesu bindowania danych do kontrolek.
        /// </summary>
        /// <param name="onDataLoaded" type="AjaxRequestCallback">
        /// Callback, wywolywany po pobraniu danych ze zr�dla danych.
        /// </param>
        /// <param name="onError" type="AjaxErrorCallback">
        /// Callback, wywolywany po stwierdzeniu problemu z pobieraniem danych.
        /// </param>
        var ajaxOptions = {};
        ajaxOptions.async = true;
        ajaxOptions.contentType = 'text/x-json';
        ajaxOptions.data = this._dataRequestParameters;
        ajaxOptions.error = onError;
        ajaxOptions.success = onDataLoaded;
        ajaxOptions.type = (this._requestMethod === OcenyOpisowe.Client.Web.AjaxRequestMethod.get) ? 'GET' : 'POST';
        ajaxOptions.url = this._dataSourceUrl;
        $.ajax(ajaxOptions);
    },
    
    _onLoadingError: function OcenyOpisowe_Client_Data_JsonActionResultDataSource$_onLoadingError(httpRequest, errorMessage, ex) {
        /// <summary>
        /// Domyslna metoda wywolywana w momencie wykrycia problemu z pobieraniem danych do kontrolki.
        /// </summary>
        /// <param name="httpRequest" type="jQueryXmlHttpRequest">
        /// Obiekt rzadania HTTP sluzacego do pobierania danych do kontrolki.
        /// </param>
        /// <param name="errorMessage" type="String">
        /// Tresc bledu przekazana z ajax'u.
        /// </param>
        /// <param name="ex" type="Error">
        /// Obiekt bledu.
        /// </param>
        OcenyOpisowe.Client.Application.get_instance().get_console().reportError(errorMessage);
    }
}


OcenyOpisowe.Client.Security.User.registerClass('OcenyOpisowe.Client.Security.User');
OcenyOpisowe.Client.Application.registerClass('OcenyOpisowe.Client.Application');
OcenyOpisowe.Client.ApplicationConsole.registerClass('OcenyOpisowe.Client.ApplicationConsole');
OcenyOpisowe.Client.Controls.AbstractControl.registerClass('OcenyOpisowe.Client.Controls.AbstractControl');
OcenyOpisowe.Client.Controls.AbstractMenuControl.registerClass('OcenyOpisowe.Client.Controls.AbstractMenuControl', OcenyOpisowe.Client.Controls.AbstractControl);
OcenyOpisowe.Client.Controls.ApplicationScreen.registerClass('OcenyOpisowe.Client.Controls.ApplicationScreen', OcenyOpisowe.Client.Controls.AbstractControl);
OcenyOpisowe.Client.Controls.DataBoundControl.registerClass('OcenyOpisowe.Client.Controls.DataBoundControl', OcenyOpisowe.Client.Controls.AbstractControl);
OcenyOpisowe.Client.Controls.UserProfileControl.registerClass('OcenyOpisowe.Client.Controls.UserProfileControl', OcenyOpisowe.Client.Controls.DataBoundControl);
OcenyOpisowe.Client.Controls.MenuControl.registerClass('OcenyOpisowe.Client.Controls.MenuControl', OcenyOpisowe.Client.Controls.DataBoundControl);
OcenyOpisowe.Client.Controls.MenuItemControl.registerClass('OcenyOpisowe.Client.Controls.MenuItemControl', OcenyOpisowe.Client.Controls.AbstractMenuControl);
OcenyOpisowe.Client.Controls.ProfileControl.registerClass('OcenyOpisowe.Client.Controls.ProfileControl', OcenyOpisowe.Client.Controls.AbstractControl);
OcenyOpisowe.Client.Controls.ScreenTitleControl.registerClass('OcenyOpisowe.Client.Controls.ScreenTitleControl', OcenyOpisowe.Client.Controls.AbstractControl);
OcenyOpisowe.Client.Data.JsonActionResultDataSource.registerClass('OcenyOpisowe.Client.Data.JsonActionResultDataSource', null, OcenyOpisowe.Client.Data.IDataSource);
OcenyOpisowe.Client.Application._instance = null;
})(jQuery);

//! This script was generated using Script# v0.7.0.0
